//
// Created by smile on 11/27/22.
//

/**
 * Sysu data class !
 */
#ifndef MYSQL_SYSU_DATA_H
#define MYSQL_SYSU_DATA_H

#include "my_global.h"
#include "my_sys.h"

extern PSI_memory_key sysu_cmp_memory;

class Sysu_data {
public:
    Sysu_data();
    ~Sysu_data();
    int close_table();
    int create_table(char *path);
    int open_table(char *path);
    int trunc_table();
    int row_size(int length);
    long long cur_position();
    int del_records();
    int records();
    /**
     *写入一条记录
     * @param：
     *      buf指针: 指向数据本身的指针
     *      length: 数据的长度（byte）
     * @return：
     *      写入了多少个字节
     */
    long long write_row(unsigned char*buf, int length);

    /**
     * 更新一条记录
     * @param：
     *      old_rec：保存老数据值的指针
     *      new_rec：指向是新数据的指针
     * @return：
     */
    long long update_row(unsigned char*old_rec, unsigned char*new_rec, int length, long long position);

    /**
     * 读取一条记录
     * @param：
     *      buf：把记录放在buf指向的地址
     *      length：记录的长度
     *      position: 记录在文件中的位置
     *
     * @return
    */
    int read_row(unsigned char*buf, int length, long long position);

    /**
     * 删除一条记录
     * @param:
     *      old_rec:要删除的记录的值
     *      length:记录的长度
     *      position:记录在文件中的位置
     * @return
     * */
     int delete_row(unsigned char*old_rec, int length, long long position);

private:
    File data_file;
    int header_size;
    int record_header_size;
    bool crashed;
    int number_records;
    int number_del_records;
    int read_header();
    int write_header();
};


#endif //MYSQL_SYSU_DATA_H
